package cn.walls1717.juc.lock;

import lombok.extern.slf4j.Slf4j;

/**
 * 锁粗化测试
 *
 * @author walls1717
 * @create 2022/12/17 14:10
 **/
@Slf4j
public class LockBigDemo {
    static Object o = new Object();
    public static void main(String[] args) {
        new Thread(()->{
            /*
             像这样方法首位相接，前后锁的都是一个对象，那么JIT会将这几个synchronized块合并成一个大块，
             加粗加大范围，一次申请锁即可，避免重复申请锁，释放锁，提高性能。
             */
            synchronized (o) {
                log.info("111");
            }
            synchronized (o) {
                log.info("222");
            }
            synchronized (o) {
                log.info("333");
            }

            // 会优化成如下代码
            synchronized (o) {
                log.info("111");
                log.info("222");
                log.info("333");
            }
        }, "t1").start();
    }
}
